package cn.com.nes.site.service.crm.customer.bo;

import cn.com.nes.site.entity.bo.PageBO;
import cn.com.nes.site.entity.em.crm.opportunity.DeclareCategoryEnum;
import cn.com.nes.site.entity.em.crm.opportunity.OpportunityClassificationEnum;
import cn.com.nes.site.entity.em.crm.opportunity.OpportunityStageEnum;
import cn.com.nes.site.entity.em.crm.opportunity.OpportunityTypeEnum;
import cn.com.nes.site.entity.em.project.ProjectRelationDataTypeEnum;
import cn.com.nes.site.service.crm.opportunity.bo.OpportunityBO;
import cn.com.nes.site.service.crm.opportunity.dto.OpportunityHouseDTO;
import cn.hutool.core.util.StrUtil;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 商机保存入参模型
 */
@Data
public class SaveOpportunityBO extends PageBO {

    // ---------- 业务逻辑参数 ----------

    /**
     * 是否新增
     */
    private Boolean addOpportunity = false;

    /**
     * 项目关系数据生成类型
     */
    private ProjectRelationDataTypeEnum projectRelationDataTypeEnum;

    /**
     * 关联的商机ID
     */
    private String relateOpportunityUuid;


    /**
     * 商机ID
     */
    private String uuid;

    /**
     * 所属公司
     */
    private String companyId;

    /**
     * 商机分类
     */
    private OpportunityClassificationEnum opportunityClassification = OpportunityClassificationEnum.RETAIL;

    /**
     * 商机阶段 01-新商机 02-跟进中 03-商机成交（签订合同，生成项目）04-商机流失
     */
    private OpportunityStageEnum opportunityStage = OpportunityStageEnum._new;

    /**
     * 商机类型：01-设备购买 02-售后维修  03-项目洽谈
     */
    private OpportunityTypeEnum opportunityType = OpportunityTypeEnum._purchase;

    /**
     * 商机名称
     */
    private String opportunityName;

    /**
     * 客户ID
     */
    private String customerId;

    /**
     * 房屋ID
     */
    private String houseId;

    /**
     * 行政区划
     */
    private String xzqhdm;

    /**
     * 项目地址
     */
    private String projectAddress;

    /**
     * 进场时间
     */
    private Date mobilizationTime;

    /**
     * 竣工时间
     */
    private Date completeTime;

    /**
     * 订货时间
     */
    private Date orderGoodsTime;

    /**
     * 设备数量
     */
    private Integer equiNumber;

    /**
     * 建筑面积
     */
    private BigDecimal projectArea;

    /**
     * 建筑性质
     */
    private String buildNature;

    /**
     * 建筑种类
     */
    private String bulidType;

    /**
     * 设备规格
     */
    private String equiSpec;

    /**
     * 设备规格参数
     */
    private String equiSpecSize;

    /**
     * 备注
     */
    private String memo;

    //项目相关方信息

    /**
     * 采购方采购方式
     */
    private String cgfType;

    /**
     * 采购方联系方式
     */
    private String cgfPhone;

    /**
     * 设计方公司名
     */
    private String sjfCompanyName;

    /**
     * 设计方联系方式
     */
    private String sjfPhone;

    /**
     * 承建方公司名
     */
    private String cjfCompanyName;

    /**
     * 承建方联系方式
     */
    private String cjfPhone;

    /**
     * 投资方公司名
     */
    private String tzfCompanyName;

    /**
     * 投资方联系方式
     */
    private String tzfPhone;

    /**
     * 监理方公司名
     */
    private String jlfCompanyName;

    /**
     * 监理方联系方式
     */
    private String jlfPhone;

    /**
     * 申报类别
     */
    private DeclareCategoryEnum categoryOfDeclaration = DeclareCategoryEnum.NEW;

    /**
     * 新申报面积
     */
    private BigDecimal newlyDeclaredArea;

    /**
     * 原申报面积
     */
    private BigDecimal originalDeclaredArea;

    /**
     * 客户编号-电表号
     */
    private String electricityMeterNumbers;

    /**
     * 客户编号-燃气表号
     */
    private String gasMeterNumbers;

    /**
     * 门牌号
     */
    private String houseNumber;

    /**
     * 户籍情况：01-本地，02-非本地
     */
    private String householdRegistration;

    /**
     * 是否安装光伏
     */
    private Boolean installPhotovoltaic;

    /**
     * 预期金额
     */
    private BigDecimal amount;

    /**
     * bimId
     */
    private String bimId;

    /**
     * 相关线索
     */
    private String clueId;

    /**
     * 经度
     */
    private BigDecimal longitude;

    /**
     * 纬度
     */
    private BigDecimal latitude;

    /**
     * 联系人
     */
    private String personInCharge;

    /**
     * 联系电弧
     */
    private String personInChargePhone;

    /**
     * 性别
     */
    private String sex;

    /**
     * 微信
     */
    private String wechat;

    /**
     * 图片1
     */
    private String picture1;

    /**
     * 图片2
     */
    private String picture2;

    /**
     * 图片3
     */
    private String picture3;

    /**
     * 商机金额
     */
    private BigDecimal opportunityMoney;

    /**
     * 预计成交日期
     */
    private Date estimatedClosingDate;

    /**
     * 扩展字段
     */
    private String jsonData;

    /**
     * 模板ID
     */
    private String templateId;

    /**
     * 计划年度
     */
    private String planYear;

    /**
     * 商务项目房屋参数模型
     */
    private OpportunityHouseDTO opportunityHouseDTO;


    public OpportunityBO convertToBO() {
        OpportunityBO opportunityBO = copyOperateInfo(this, OpportunityBO.class);
        if (StrUtil.isEmpty(uuid)) {
            opportunityBO.setAddOpportunity(Boolean.TRUE);
        }
        opportunityBO.setCustomerUuid(customerId);
        opportunityBO.setAreaCode(xzqhdm);
        return opportunityBO;
    }

}

